#ifndef __ISCENEGENERATOR_H__
#define __ISCENEGENERATOR_H__

#include "CTypes.h"
#include "UsefulData.h"
#include "IDrawableSceneNode.h"
#include "ITextSceneNode.h"
#include "ILightSceneNode.h"
#include "CColor.h"
#include "IFont.h"
#include "I2DCameraSceneNode.h"
#include "I3DCameraSceneNode.h"
#include "I2DSpriteSceneNode.h"

class ISceneManager;

class ISceneGenerator
{
public:
	ISceneGenerator()								{}
	virtual ~ISceneGenerator()						{}

	virtual void SetDefaultScene3DParent(ISceneNode *newdp)															= 0;
	virtual void SetDefaultScene2DParent(ISceneNode *newdp)															= 0;
	virtual ISceneNode *GetNewEmptySceneNode(ISceneNodeBasicParamsDeclaration)										= 0;
	virtual I2DCameraSceneNode *GetNew2DCameraSceneNode(ISceneNodeBasicParamsDeclaration)							= 0;
	virtual I3DCameraSceneNode *GetNew3DCameraSceneNode(vPos angle=90.0,vPos aspect=1.0,
										vector3dvpos lookat=vector3dvpos(0.0,0.0,0.0),vPos znear=0.0,vPos zfar=100.0,
										vector3dvpos vup=vector3dvpos(0.0,1.0,0.0),
										ISceneNodeBasicParamsDeclaration)											= 0;
	virtual ILightSceneNode *GetNewLightSceneNode(IMaterial mat=IMaterial(),vector3df32 nspotd=vector3df32(0.0,0.0,0.0),
										f32 spotco=10.0,ISceneNodeBasicParamsDeclaration)							= 0;
	virtual IDrawableSceneNode *GetNewCubeSceneNode(vector3dvpos Len=vector3dvpos(1.0,1.0,1.0),
										ISceneNodeBasicParamsDeclaration)											= 0;
	virtual IDrawableSceneNode *GetNewPoligon3DSceneNode(vector3dvpos Len=vector3dvpos(1.0,1.0,1.0),
										IPoligon3D *PolBase=NULL,std::vector<bool> *HideFace=NULL,
										ISceneNodeBasicParamsDeclaration)											= 0;
	virtual IDrawableSceneNode *GetNewSphereSceneNode(vector3dvpos Radius=vector3dvpos((vPos)1.0,(vPos)1.0,(vPos)1.0),
										u32 Partitions=10,ISceneNodeBasicParamsDeclaration)							= 0;

	virtual I2DSpriteSceneNode *GetNew2DSpriteSceneNode(ITexture *Tex=NULL,ISceneNodeBasicParamsDeclaration)		= 0;
	virtual ITextSceneNode *GetNewTextNode(IFont *fnt=NULL,stringc Text="",AlignementX ax=ALIGNEMENT_X_LEFT,
										AlignementY ay=ALIGNEMENT_Y_UNDER,
										vector2dvpos nSpace=vector2dvpos(0.0,0.0),vPos nPoints=0.1,
										ISceneNodeBasicParamsDeclaration)											= 0;
};

#endif
